import io
import base64
import json
import sys
from math import pi

import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import requests

matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
API_KEY = "8QRGwlx3EiTgFhx8isqSxGye"
SECRET_KEY = "u3Nu9cZRfjrxKWCjikhlKW0LM35TOPYM"

def get_access_token():
    """
    使用 AK，SK 生成鉴权签名（Access Token）
    :return: access_token，或是None(如果错误)
    """
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
    return str(requests.post(url, params=params).json().get("access_token"))
class UserProfile:
    def __init__(self, skills, job):
        self.skills =\
            skills
        self.job = job

def str_to_json(data:str):
    start_index = data.find("```json")
    end_index = data.rfind("```")
    result = data[start_index+8:end_index]
    return result

def main2(user_profile):
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token()
    # 注意message必须是奇数条
    payload = json.dumps({
        "messages": [
            {
                "role": "user",
                "content": "这是用户的技能" + user_profile.skills + "他的期望工作是" + user_profile.job + "根据提供的信息给出 建筑/房地产, 金融, 产品, 互联网, 生产/采购/物流,人事/行政/高级管理,工程师,其它,教育/翻译/服务业 的行业适配度打个分  十分制"
                           + " 请按照以下JSON格式对以下项目进行打分，并只返回这个格式的分数，不要添加任何额外的描述或信息: { '建筑/房地产': [分数],  '金融': [分数],  '产品': [分数],  '互联网': [分数], '生产/采购/物流': [分数]  ,'人事/行政/高级管理': [分数],'教育/翻译/服务业': [分数],'工程师'; [分数]}  "

            }
            # ,
            # {
            #    "role": "assistant",
            #    "content": "你好，有什么我可以帮助你的吗？"
            # }
        ]
    })
    headers = {
        'Content-Type': 'application/json'
    }

    response = requests.request("POST", url, headers=headers, data=payload)
    res=response.text
    data = json.loads(res, strict=False)

    # 提取result键的值
    result = data['result']
    result= str_to_json(result)
    result = result.replace("'", '"')
   # print(result)
    data = json.loads(result, strict=False)  # 注意还要一次loads转换才行 我都是参考gpt和网上的代码观察到的
    res = data['建筑/房地产']
    res1 = data['金融']
    res2 = data['产品']
    res3 = data['互联网']
    res4 = data['生产/采购/物流']
    res5 = data['人事/行政/高级管理']
    res6 = data['工程师']
    res8 = data['教育/翻译/服务业']
    list =[res, res1, res2, res3,res4,res5,res6,res8]
    return list


def figures(list5):
    df = pd.DataFrame({
        'group': ['A', 'B', 'C', 'D', 'E','F','G','H'],
        'var1': list5
    })
    df.index = ['建筑/房地产', '金融', '产品', '互联网', '生产/采购/物流','人事/行政/高级管理','工程师','教育/翻译/服务业']
    df = df.T

    values = df.iloc[0].values.flatten().tolist()


    # number of variable
    # 变量类别
    categories = list(df)
    # 变量类别个数
    N = len(categories)
    # plot the first line of the data frame.
    # 绘制数据的第一行
    values = df.iloc[1].values.flatten().tolist()

    # 将第一个值放到最后，以封闭图形
    values += values[:1]

    angles = [n / float(N) * 2 * pi for n in range(N)]
    angles += angles[:1]
    fig, ax = plt.subplots()
    ax = plt.subplot(111, polar=True)
    #fig,ax=plt.subplots(111,polar=True)

    plt.xticks(angles[:-1], categories, color='grey', size=8)
    ax.set_rlabel_position(0)
    plt.yticks([5, 10], ["5", ""], color="grey", size=7)
    plt.ylim(0, 10)

    ax.plot(angles, values, linewidth=1, linestyle='solid')

    ax.fill(angles, values, 'b', alpha=0.1);
    fig.savefig('plot.png')

    # 读入PNG图片
    with open('plot.png', 'rb') as f:
        img_data = f.read()

    # 将PNG图片转换为Base64编码格式
    img_base64 = base64.b64encode(img_data).decode('utf-8')

    # 将Base64编码格式插入HTML模板中的<img>标签中
    html = format(img_base64)

    # 输出HTML代码
    #print(html)
    #plt.show()
    return  html




if __name__ == '__main__':
    # skills = "Html,Jss"
    # job = "前端"
    arguments = ''
    # 打印传递的参数
    if len(sys.argv) > 1:
        for arg in sys.argv[1:]:
            arguments = ' '.join(sys.argv[1:])
    fields = arguments.split(',')
    job = fields[-1]
    skills = ','.join(fields[0])
    user_profile = UserProfile(skills, job)
    jason = figures(main2(user_profile))
    print(jason)
    #这个东西很奇怪 有时候可以运行 有时候又报错

